package com.atguigu.singleton.type8;

public class SingletonTest08 {
    public static void main(String[] args) {
        Singleton instance = Singleton.INSTANCE;
        Singleton instance2 = Singleton.INSTANCE;
        System.out.println(instance == instance2);
        System.out.println(instance.hashCode());
        System.out.println(instance2.hashCode());

        instance.sayOK();
        instance2.sayOK();
    }
}
//使用枚举，可以实现单例
/*
优缺点说明：
1）这借助JDK1.5中添加枚举来实现单例模式，不仅能够避免多线程同步问题，而且还能防止反序列化重新创建新的对象
2）这种方式是Effective Java作者Josh Bloch提倡的方式
3）结论：推荐使用

 */

/*
单例械注意事项和细节说明
1）单例械保证了系统内存中该类只存在一个对象，节省了系统资源，对于一些需要频繁创建销毁的对象，使用单例模式可以提高系统性能
2）当想实例化一个单例类的时候，必须要记住使用相应的获取对象的方法，而不是使用new
3)单例模式使用场景：需要频繁的进行创建和销毁对象、创建对象时耗时过多或耗费资源过多（即：重量级对象），
但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象（比如数据源、session工厂等）
 */
enum Singleton{
    INSTANCE; //属性
    public void sayOK(){
        System.out.println("ok~");
    }
}
